<?php
/**
 * Created by PhpStorm.
 * User: stupboy
 * Date: 2018/5/29
 * Time: 15:13
 * Mail:87658989@qq.com
 */

namespace app\adminapi\controller;

use app\adminapi\model;
use app\adminapi\validate\Report;
use app\base\exception\RecordHasExistException;
use app\base\service\Csv;
use app\adminapi\validate;

/**
 * @name【乘客管理】
 * @baseurl【adminapi/Passenger】
 * @file【Passenger.php】
 */
class Passenger extends Base
{
    /**
     * @name【乘客列表】
     * @desc【乘客列表】
     * @uri【passengerList】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function passengerList(){
        $report = new Report();
        $param  = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        list($code,$data) = (new model\Passenger())->passengerList($param['fields'],$where,$param['page'],$param['pagenum']);
        if($code==1){
            return $this->retSucc($data);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【乘客列表下载】
     * @desc【乘客列表下载】
     * @uri【downLoadPassengerList】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ order_id,passenger_name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * counts $ int $ 1$ 下载数据记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function downLoadPassengerList(){
        set_time_limit(300);
        $csv       = new Csv();
        $report = new Report();
        $param  = $report->scene('download')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $totalPage = $param['counts'] % 2000 == 0 ? $param['counts']/2000 : floor($param['counts']/2000) + 1;
        $f = [];
        for($i=1;$i<=$totalPage;$i++){
            list($code,$data) = (new model\Passenger())->passengerList($param['fields'],$where,$i,2000);
            if($code==0) continue;
            if(empty($data['data'])) break;
            $csv->open($data['fields']);
            //以下by玉林
            foreach ($data['data'] as $key => $val) {

                if(isset($data['data'][$key]['sex']) && $data['data'][$key]['sex'] == '0'){
                    $data['data'][$key]['sex'] = '男';
                }
                elseif (isset($data['data'][$key]['sex']) && $data['data'][$key]['sex'] == '1'){
                    $data['data'][$key]['sex'] = '女';
                }

                if(isset($data['data'][$key]['is_check']) && $data['data'][$key]['is_check']==1){
                    $data['data'][$key]['is_check']='是';
                }
                else if(isset($data['data'][$key]['is_check']) && $data['data'][$key]['is_check']==9){
                    $data['data'][$key]['is_check']='否';
                }

                if(isset($data['data'][$key]['is_instead']) && $data['data'][$key]['is_instead']==1){
                    $data['data'][$key]['is_instead']='是';
                }
                else if(isset($data['data'][$key]['is_instead']) && $data['data'][$key]['is_instead']==9){
                    $data['data'][$key]['is_instead']='否';
                }

                if(isset($data['data'][$key]['is_vip']) && $data['data'][$key]['is_vip']==1){
                    $data['data'][$key]['is_vip']='是';
                }
                else if(isset($data['data'][$key]['is_vip']) && $data['data'][$key]['is_vip']==9){
                    $data['data'][$key]['is_vip']='否';
                }
            }
            //以上by玉林
            $csv->writeAll($data['data']);
            $f[] = $csv->myClose();
        }
        $csv->mergeCsvToDownload($f);
    }

    /**
     * @name【增加乘客】
     * @desc【增加乘客】
     * @uri【add】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * user_id $ int $ 1 $ 归属用户id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * name $ string $ 李萨那 $ 乘客姓名 $ 1 #
     * phone $ string $ 13999999999 $ 手机号码 $ 1 #
     * age $ int $ 1 $ 年龄 #
     * birthday $ date $ 1997-1-1 $ 出生日期 #
     * sex $ int $ 1 $ 性别1男2女 $ 1 #
     * source $ int $ 1 $ 来源 $ 1 #
     * occupation $ string $ 默认值 $ 职业 #
     * head_portrait $ string $ 默认值 $ 头像地址 #
     * province $ int $ 1 $ 省份数值 #
     * city $ int $ 1 $ 城市数值 #
     * county $ int $ 1 $ 区域数值 #
     * unit $ string $ 办公室 $ 单位名称 #
     * department_id $ int $ 1 $ 部门id #
     * id_number $ string $ 350987977697698766 $ 身份证号码 #
     * id_img $ string $  $ 身份证照片 #
     * live_number $ string $ 350987977697698766 $ 居住证号码 #
     * live_img $ string $  $ 居住证照片 #
     * card_number $ string $ 622909998989999999 $ 银行卡号 #
     * card_img $ string $  $ 银行卡照片 #
     * bank $ string $ 中国银行 $ 开户行 #
     * wechat $ string $ 13999999999 $ 微信 #
     * alipay $ string $ 13999999999 $ 支付宝 #
     * update_time $ date $ 1997-1-1 $ 更新时间 #
     * email $ string $ xdg@xdg.com $ 电子邮件 #
     * limit_id $ string $  $ 用车权限 #
     * badge_number $ string $ 232324324 $ 工号 #
     * is_check $ int $ 1 $ 是否审核员 1是 9否 #
     * is_instead $ int $ 1 $ 是否代打车 1是 9否 #
     * is_vip $ int $ 1 $ 是否VIP 1是 9否 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     * @throws  \app\base\exception\RecordHasExistException
     */
    public function add(){
        // 校验请求参数
        $validate = new validate\Passenger();
        // 获取所有请求参数
        $params      = $validate->scene('add')->goCheck()->getCurrentData();
        $passenger   = (new model\Passenger()) ->createOrUpdate($params);
        return $this->retSucc(['passenger_id' => $passenger]);
    }

    /**
     * @name【编辑乘客】
     * @desc【编辑乘客】
     * @uri【edit】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * passenger_id $ int $ 1 $ 乘客id $ 1 #
     * user_id $ int $ 1 $ 归属用户id $ 1 #
     * company_id $ int $ 1 $ 单位id $ 1 #
     * name $ string $ 李萨那 $ 乘客姓名 $ 1 #
     * phone $ string $ 13999999999 $ 手机号码 $ 1 #
     * age $ int $ 1 $ 年龄 #
     * birthday $ date $ 1997-1-1 $ 出生日期 #
     * sex $ int $ 1 $ 性别1男2女 $ 1 #
     * source $ int $ 1 $ 来源 $ 1 #
     * occupation $ string $ 默认值 $ 职业 #
     * head_portrait $ string $ 默认值 $ 头像地址 #
     * province $ int $ 1 $ 省份数值 #
     * city $ int $ 1 $ 城市数值 #
     * county $ int $ 1 $ 区域数值 #
     * unit $ string $ 办公室 $ 单位名称 #
     * department_id $ int $ 1 $ 部门id #
     * id_number $ string $ 350987977697698766 $ 身份证号码 #
     * id_img $ string $  $ 身份证照片 #
     * live_number $ string $ 350987977697698766 $ 居住证号码 #
     * live_img $ string $  $ 居住证照片 #
     * card_number $ string $ 622909998989999999 $ 银行卡号 #
     * card_img $ string $  $ 银行卡照片 #
     * bank $ string $ 中国银行 $ 开户行 #
     * wechat $ string $ 13999999999 $ 微信 #
     * alipay $ string $ 13999999999 $ 支付宝 #
     * update_time $ date $ 1997-1-1 $ 更新时间 #
     * email $ string $ xdg@xdg.com $ 电子邮件 #
     * limit_id $ string $  $ 用车权限 #
     * badge_number $ string $ 232324324 $ 工号 #
     * is_check $ int $ 1 $ 是否审核员 1是 9否 #
     * is_instead $ int $ 1 $ 是否代打车 1是 9否 #
     * is_vip $ int $ 1 $ 是否VIP 1是 9否 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息
     * 】
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\exception\DbException
     * @throws  \app\base\exception\RecordHasExistException
     */
    public function edit(){
        // 校验请求参数
        $validate = new validate\Passenger();
        // 获取所有请求参数
        $params      = $validate->scene('edit')->goCheck()->getCurrentData();
        $result      = (new model\Passenger()) ->createOrUpdate($params);
        return $this->retSucc(['updated' => $result ]);
    }

    /**
     * @name【删除乘客】
     * @desc【删除乘客】
     * @uri【delete】
     * @method【post】
     * @param【
     * passenger_ids $ int $ 1 $ 司机id，多个请用','号连接 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * deleted $ int $  1 $ 删除的记录条数
     * 】
     */
    public function delete(){
        // 校验请求参数
        $validate = new validate\Passenger();
        // 获取所有请求参数
        $params = $validate->scene('delete')->goCheck()->getCurrentData();

        $where = ['passenger_id' => ['IN', explode(',', $params['passenger_ids'])]];
        $buildQuery = function($query) use ($where) {
            model\Common::authCompanyQuery($query, $where, 'company_id');
        };

        $result = model\Passenger::destroy($buildQuery);
        return $this->retSucc(['deleted' => $result]);
    }
}